home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / digitr2a / control3.ctl < prev    next >
Text File  |  1999-07-30  |  8KB  |  241 lines

  1. VERSION 5.00
  2. Begin VB.UserControl Control3D 
  3.    Appearance      =   0  'Flat
  4.    BackStyle       =   0  'Transparent
  5.    CanGetFocus     =   0   'False
  6.    ClientHeight    =   690
  7.    ClientLeft      =   0
  8.    ClientTop       =   0
  9.    ClientWidth     =   765
  10.    ClipControls    =   0   'False
  11.    Enabled         =   0   'False
  12.    InvisibleAtRuntime=   -1  'True
  13.    KeyPreview      =   -1  'True
  14.    PropertyPages   =   "Control3D.ctx":0000
  15.    ScaleHeight     =   690
  16.    ScaleWidth      =   765
  17.    ToolboxBitmap   =   "Control3D.ctx":001E
  18.    Begin VB.Image imgIcon 
  19.       Height          =   480
  20.       Left            =   0
  21.       Picture         =   "Control3D.ctx":0330
  22.       Top             =   0
  23.       Width           =   480
  24.    End
  25. End
  26. Attribute VB_Name = "Control3D"
  27. Attribute VB_GlobalNameSpace = False
  28. Attribute VB_Creatable = True
  29. Attribute VB_PredeclaredId = False
  30. Attribute VB_Exposed = True
  31. Attribute VB_Ext_KEY = "PropPageWizardRun" ,"Yes"
  32. Option Explicit
  33.  
  34. Enum LineStyle
  35.     Neutral
  36.     Inward
  37.     Outward
  38. End Enum
  39.  
  40. Enum TagTest
  41.     Two = -1
  42.     None = 0
  43.     Inset = 1
  44.     Outset = 2
  45. End Enum
  46.  
  47. Const VALID_CHARS = "012"
  48.  
  49. Dim NMask As String
  50. Dim OutTag As String
  51. Dim InTag As String
  52. Dim Targets() As Control
  53. Dim TargetCount As Integer
  54. Dim NColor As Long
  55. Dim SColor As Long
  56. Dim HColor As Long
  57.  
  58. Dim AdjustX As Integer
  59. Dim AdjustY As Integer
  60.  
  61. Property Get HighlightColor() As OLE_COLOR
  62.     HighlightColor = HColor
  63. End Property
  64.  
  65. Property Let HighlightColor(NewColor As OLE_COLOR)
  66.     HColor = NewColor
  67.     PropertyChanged "HighlightColor"
  68. End Property
  69.  
  70. Property Get ShadowColor() As OLE_COLOR
  71.     ShadowColor = SColor
  72. End Property
  73.  
  74. Property Let ShadowColor(NewColor As OLE_COLOR)
  75.     SColor = NewColor
  76.     PropertyChanged "ShadowColor"
  77. End Property
  78.  
  79. Property Get NeutralColor() As OLE_COLOR
  80.     NeutralColor = NColor
  81. End Property
  82.  
  83. Property Let NeutralColor(NewColor As OLE_COLOR)
  84.     NColor = NewColor
  85.     PropertyChanged "NeutralColor"
  86. End Property
  87.  
  88. Property Get InsetTag() As String
  89. Attribute InsetTag.VB_ProcData.VB_Invoke_Property = "General"
  90.     InsetTag = InTag
  91. End Property
  92.  
  93. Property Let InsetTag(NewTag As String)
  94.     InTag = NewTag
  95.     PropertyChanged "InsetTag"
  96. End Property
  97.  
  98. Property Get OutsetTag() As String
  99. Attribute OutsetTag.VB_ProcData.VB_Invoke_Property = "General"
  100.     OutsetTag = OutTag
  101. End Property
  102.  
  103. Property Let OutsetTag(NewTag As String)
  104.     OutTag = NewTag
  105.     PropertyChanged "OutsetTag"
  106. End Property
  107.  
  108. Property Get NumberMask() As String
  109. Attribute NumberMask.VB_ProcData.VB_Invoke_Property = "General"
  110.     NumberMask = NMask
  111. End Property
  112.  
  113. Property Let NumberMask(NewMask As String)
  114.     NMask = CheckMask(NewMask)
  115.     PropertyChanged "NumberMask"
  116. End Property
  117.  
  118. Private Sub UserControl_Initialize()
  119.     AdjustX = Screen.TwipsPerPixelX
  120.     AdjustY = Screen.TwipsPerPixelY
  121. End Sub
  122.  
  123. Private Sub UserControl_InitProperties()
  124.     OutTag = "/out"
  125.     InTag = "/in"
  126.     SColor = vb3DShadow
  127.     HColor = vb3DHighlight
  128.     NColor = vb3DFace
  129.     NMask = "11111"
  130. End Sub
  131.  
  132. Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  133.     HColor = PropBag.ReadProperty("HighlightColor", vb3DHighlight)
  134.     SColor = PropBag.ReadProperty("ShadowColor", vb3DShadow)
  135.     NColor = PropBag.ReadProperty("NeutralColor", vb3DFace)
  136.     OutTag = PropBag.ReadProperty("OutsetTag", "/out")
  137.     InTag = PropBag.ReadProperty("InsetTag", "/in")
  138.     NMask = PropBag.ReadProperty("NumberMask", "1111")
  139. End Sub
  140.  
  141. Private Sub UserControl_Resize()
  142.     UserControl.Size imgIcon.Width, imgIcon.Height
  143. End Sub
  144.  
  145. Private Sub FindTargetControls()
  146. Dim ActiveObject, i As Integer
  147. Dim ValidTarget As Boolean
  148.     On Error Resume Next
  149.     For Each ActiveObject In UserControl.Parent.Controls
  150.         ValidTarget = False
  151.         ValidTarget = CheckForTag(ActiveObject) > 0
  152.         If ActiveObject.Name = Ambient.DisplayName Then ValidTarget = False
  153.         If ValidTarget Then
  154.             TargetCount = TargetCount + 1
  155.             ReDim Preserve Targets(1 To TargetCount)
  156.             Set Targets(TargetCount) = ActiveObject
  157.         End If
  158.     Next ActiveObject
  159. End Sub
  160.  
  161. Public Sub PaintTargetControls()
  162. Dim i As Integer, j As Integer
  163. Dim LineMode As LineStyle
  164.     FindTargetControls
  165.     For i = 1 To Len(NMask)
  166.         LineMode = CInt(Left(Right(NMask, i), 1))
  167.         For j = 1 To TargetCount
  168.             DrawLine LineMode, Targets(j), i
  169.         Next j
  170.     Next i
  171. End Sub
  172.  
  173. Private Function CheckForTag(TestObj) As TagTest
  174. Dim InsetPresent As Boolean, OutsetPresent As Boolean
  175.     InsetPresent = InStr(1, TestObj.Tag, InTag) > 0
  176.     OutsetPresent = InStr(1, TestObj.Tag, OutTag) > 0
  177.     If InsetPresent Then CheckForTag = Inset
  178.     If OutsetPresent Then CheckForTag = Outset
  179.     If Not (InsetPresent Or OutsetPresent) Then CheckForTag = None
  180.     If InsetPresent And OutsetPresent Then CheckForTag = Two
  181. End Function
  182.  
  183. Public Function CheckMask(TempMask As String) As String
  184. Dim i As Integer, CharPos As Integer
  185. Dim Character As String, StartLen As Integer
  186.     StartLen = Len(TempMask)
  187.     If StartLen = 0 Then Exit Sub
  188.     Do
  189.         i = i + 1
  190.         Character = Right(Left(TempMask, i), 1)
  191.         CharPos = InStr(1, VALID_CHARS, Character)
  192.         If Not CharPos > 0 Then
  193.             TempMask = Left(TempMask, i - 1) & Right(TempMask, Len(TempMask) - i)
  194.             i = i - 1
  195.         End If
  196.     Loop Until i = Len(TempMask)
  197.     CheckMask = TempMask
  198. End Function
  199.  
  200. Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  201.     PropBag.WriteProperty "HighlightColor", HColor, vb3DHighlight
  202.     PropBag.WriteProperty "ShadowColor", SColor, vb3DShadow
  203.     PropBag.WriteProperty "NeutralColor", NColor, vb3DFace
  204.     PropBag.WriteProperty "OutsetTag", OutTag, "/out"
  205.     PropBag.WriteProperty "InsetTag", InTag, "/in"
  206.     PropBag.WriteProperty "NumberMask", NMask, "1111"
  207. End Sub
  208.  
  209. Private Sub DrawLine(LStyle As LineStyle, ControlName As Control, Level As Integer)
  210. Dim TopLeft As Long, BottomRight As Long, TagTest As Integer
  211. Dim SavedScaleMode As Integer, SavedTopLeft As Long
  212.     On Error Resume Next
  213.     If Not ControlName.Visible Then Exit Sub
  214.     SavedScaleMode = ControlName.Container.ScaleMode
  215.     ControlName.Container.ScaleMode = vbTwips
  216.     TagTest = CheckForTag(ControlName)
  217.     If TagTest < 1 Then Exit Sub
  218.     If LStyle = Neutral Then
  219.         TopLeft = NColor
  220.         BottomRight = NColor
  221.     ElseIf LStyle = Inward Then
  222.         TopLeft = SColor
  223.         BottomRight = HColor
  224.     ElseIf LStyle = Outward Then
  225.         TopLeft = HColor
  226.         BottomRight = SColor
  227.     End If
  228.     If TagTest = Inset Then
  229.         SavedTopLeft = TopLeft
  230.         TopLeft = BottomRight
  231.         BottomRight = SavedTopLeft
  232.     End If
  233.     ControlName.Container.CurrentX = ControlName.Left - (AdjustX * Level)
  234.     ControlName.Container.CurrentY = ControlName.Top - (AdjustY * Level)
  235.     ControlName.Container.Line -(ControlName.Left + ControlName.Width + (AdjustX * (Level - 1)), ControlName.Top - (AdjustY * Level)), TopLeft
  236.     ControlName.Container.Line -(ControlName.Left + ControlName.Width + (AdjustX * (Level - 1)), ControlName.Top + ControlName.Height + (AdjustY * (Level - 1))), BottomRight
  237.     ControlName.Container.Line -(ControlName.Left - (AdjustX * Level), ControlName.Top + ControlName.Height + (AdjustY * (Level - 1))), BottomRight
  238.     ControlName.Container.Line -(ControlName.Left - (AdjustX * Level), ControlName.Top - (AdjustY * Level)), TopLeft
  239.     ControlName.Container.ScaleMode = SavedScaleMode
  240. End Sub
  241.